/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.uniceub.fsw.talentos.facade;

import br.uniceub.fsw.arquitetura.persistencia.transacao.Transacao;
import br.uniceub.fsw.arquitetura.servico.exception.NegocioException;
import br.uniceub.fsw.talentos.dao.TipoDesligamentoDAO;
import br.uniceub.fsw.talentos.vo.TipoDesligamentoVO;
import br.uniceub.fsw.talentos.bo.TipoDesligamentoBO;
import br.uniceub.fsw.util.TabelaHtml;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Wanderson de Souza Caldas   RA: 20604325
 */

public class TipoDesligamentoFacade {

    private String message;

    private TipoDesligamentoVO tipoDesligamento;

    private TipoDesligamentoDAO tipoDesligamentoDao;
   
    private TipoDesligamentoBO tipoDesligamentoBo;

public TipoDesligamentoFacade() {
        this.tipoDesligamentoDao = new TipoDesligamentoDAO();
        this.tipoDesligamentoBo = new TipoDesligamentoBO();
    }

public String getMessage() {
        String retorno = null;
        if(this.message == null || this.message.equals("")) {
            retorno = "&nbsp";
        } else {
            retorno = this.message;
        }
        return retorno;
    }

public void setMessage(String message) {
        this.message = message;
    }

public void operacao(HttpServletRequest req, HttpServletResponse resp) {
        String oper = req.getParameter("operacao");

        if(oper != null)
        {
            if (oper.equals("consultar")) {
                this.consultar(req, resp);
            }
            if (oper.equals("incluir")) {
                this.incluir(req, resp);
            }
            if (oper.equals("alterar")) {
                this.alterar(req, resp);
            }
            if (oper.equals("excluir")) {
                this.excluir(req, resp);
            }
            if (oper.equals("confirmar")) {
                this.confirmar(req, resp);
            }
        }
    }

public TipoDesligamentoVO getTipoDesligamento() {
        return this.tipoDesligamento;
    }

 public void setTipoDesligamento(TipoDesligamentoVO tipoDesligamento) {
        this.tipoDesligamento = tipoDesligamento;
    }

 public void consultar(HttpServletRequest req, HttpServletResponse resp) {
        String idTipoDesligamentoTmp = req.getParameter("idTipoDesligamento");

        Integer idTipoDesligamento = null;

        if(idTipoDesligamentoTmp == null || idTipoDesligamentoTmp.equals("")) {
            return;
        } else {
            idTipoDesligamento = Integer.parseInt(idTipoDesligamentoTmp);
        }

        this.tipoDesligamento = tipoDesligamentoDao.consultarPorId(idTipoDesligamento);
    }

 public void incluir(HttpServletRequest req, HttpServletResponse resp) {
        String noTipoDesligamento = req.getParameter("noTipoDesligamento");
        String dsTipoDesligamento = req.getParameter("dsTipoDesligamento");

        tipoDesligamento = new TipoDesligamentoVO();
        tipoDesligamento.setNoTipoDesligamento(noTipoDesligamento);
        tipoDesligamento.setDsTipoDesligamento(dsTipoDesligamento);

        String mensagem = null;

        try {
            tipoDesligamentoBo.validarVOUnico(tipoDesligamento);
        } catch(NegocioException ex) {
            mensagem = ex.getMessage();
        }

        if(mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

                tipoDesligamentoDao.inserir(tipoDesligamento);

                Transacao.efetivar();

                mensagem = "Tipo de desligamento incluído com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na inclusão do tipo de desligamento: " + ex.getMessage();

                tipoDesligamento = null;
            }
        } else {
            tipoDesligamento = null;
        }

        this.message = mensagem;
    }

 public void alterar(HttpServletRequest req, HttpServletResponse resp) {
        String idTipoDesligamento = req.getParameter("idTipoDesligamento");
        String noTipoDesligamento = req.getParameter("noTipoDesligamento");
        String dsTipoDesligamento = req.getParameter("dsTipoDesligamento");

        tipoDesligamento = new TipoDesligamentoVO();
        tipoDesligamento.setIdTipoDesligamento(Integer.parseInt(idTipoDesligamento));
        tipoDesligamento.setNoTipoDesligamento(noTipoDesligamento);
        tipoDesligamento.setDsTipoDesligamento(dsTipoDesligamento);

        String mensagem = null;

        try {
            tipoDesligamentoBo.validarVOUnico(tipoDesligamento);
        } catch(NegocioException ex) {
            mensagem = ex.getMessage();
        }

        if(mensagem == null || mensagem.equals("")) {
            try {
                Transacao.iniciar();

                tipoDesligamentoDao.alterar(tipoDesligamento);

                Transacao.efetivar();

                mensagem = "Tipo de desligamento alterado com sucesso.";
            } catch (Exception ex) {
                Transacao.desfazer();

                mensagem = "Problema na alteração do tipo de desligamento: " + ex.getMessage();
            }
        } else {
            tipoDesligamento = null;
        }

        this.message = mensagem;
    }

public void excluir(HttpServletRequest req, HttpServletResponse resp) {
        String idTipoDesligamento = req.getParameter("idTipoDesligamento");

        tipoDesligamento = new TipoDesligamentoVO();
        tipoDesligamento.setIdTipoDesligamento(Integer.parseInt(idTipoDesligamento));

        String mensagem = null;

        try {
            Transacao.iniciar();

            tipoDesligamentoDao.excluir(tipoDesligamento);

            Transacao.efetivar();

            mensagem = "Tipo de desligamento excluído com sucesso.";
        } catch (Exception ex) {
            Transacao.desfazer();

            mensagem = "Problema na exclusão do tipo de desligamento: " + ex.getMessage();
        }

        this.tipoDesligamento = null;

        this.message = mensagem;
    }

public void confirmar(HttpServletRequest req, HttpServletResponse resp) {
        String idTipoDesligamento = req.getParameter("idTipoDesligamento");
        String noTipoDesligamento = req.getParameter("noTipoDesligamento");
        String dsTipoDesligamento = req.getParameter("dsTipoDesligamento");

        tipoDesligamento = new TipoDesligamentoVO();
        tipoDesligamento.setIdTipoDesligamento(Integer.parseInt(idTipoDesligamento));
        tipoDesligamento.setNoTipoDesligamento(noTipoDesligamento);
        tipoDesligamento.setDsTipoDesligamento(dsTipoDesligamento);
    }

public TabelaHtml consultarTipoDesligamentos(HttpServletRequest req, HttpServletResponse resp) {
        String nome = req.getParameter("noTipoDesligamento");

        if(nome != null && !nome.equals("")) {
            TabelaHtml tabela = new TabelaHtml();

            tabela.setCampoRetorno("idTipoDesligamento");

            tabela.adicionarTitulo("Id");
            tabela.adicionarTamanho(0);
            tabela.adicionarTipo("Integer");
            tabela.adicionarStatus(false);

            tabela.adicionarTitulo("Nome");
            tabela.adicionarTamanho(80);
            tabela.adicionarTipo("String");
            tabela.adicionarStatus(true);

            tabela.adicionarTitulo("Descrição");
            tabela.adicionarTamanho(0);
            tabela.adicionarTipo("String");
            tabela.adicionarStatus(false);

            tabela.gravarCampos();

            TipoDesligamentoVO exemplo = new TipoDesligamentoVO();

            exemplo.setNoTipoDesligamento(nome);

            List<TipoDesligamentoVO> tipoDesligamentos = tipoDesligamentoDao.consultarPorExemplo(exemplo);

            // Adiciona os valores de cada tipoOcorrencia nas listas de ids e nomes
            for(int i = 0; i < tipoDesligamentos.size(); i++) {
                tabela.adicionarRegistro(converterVoParaString(tipoDesligamentos.get(i)));
            }

            return tabela;
        }

        if(nome == null) {
            TabelaHtml tabela = new TabelaHtml();

            tabela.setCampoRetorno("idTipoDesligamento");

            tabela.adicionarTitulo("Id");
            tabela.adicionarTamanho(0);
            tabela.adicionarTipo("Integer");
            tabela.adicionarStatus(false);

            tabela.adicionarTitulo("Nome");
            tabela.adicionarTamanho(80);
            tabela.adicionarTipo("String");
            tabela.adicionarStatus(true);

            tabela.adicionarTitulo("Descrição");
            tabela.adicionarTamanho(0);
            tabela.adicionarTipo("String");
            tabela.adicionarStatus(false);

            tabela.gravarCampos();

            TipoDesligamentoVO tudo = new TipoDesligamentoVO();

            tudo.setNoTipoDesligamento(nome);

            List<TipoDesligamentoVO> tipoDesligamentos = tipoDesligamentoDao.consultarTudo(tudo);

            for(int i = 0; i < tipoDesligamentos.size(); i++) {
                tabela.adicionarRegistro(converterVoParaString(tipoDesligamentos.get(i)));
            }

            return tabela;
        }
            return null;
    }

    public List<String> converterVoParaString(TipoDesligamentoVO tipoDesligamento) {
        List<String> valores = new ArrayList<String>();

        valores.add(tipoDesligamento.getIdTipoDesligamento().toString());
        valores.add(tipoDesligamento.getNoTipoDesligamento());
        valores.add(tipoDesligamento.getDsTipoDesligamento());

        return valores;
    }
}
